package config

import (
	"fmt"
	"github.com/spf13/viper"
	"go-web-admin/jwt"
	"go-web-admin/logger"
	"go-web-admin/mysql"
	"go-web-admin/redis"
	"go-web-admin/server"
)

type Config struct {
	Server server.ServerConfig
	Logger logger.LoggerConfig
	Mysql  mysql.MysqlConfig
	Redis  redis.RedisConfig
	Jwt    jwt.JwtConfig
}

// LoadConfig 加载配置文件
func LoadConfig() (config Config, err error) {

	var conf Config

	viper.SetConfigName("config-dev") // 配置文件名 (不带扩展名)
	viper.SetConfigType("yaml")       // 配置文件类型
	viper.AddConfigPath("./config")   // 查找配置文件的路径

	// 读取配置文件
	if err := viper.ReadInConfig(); err != nil {
		if _, ok := err.(viper.ConfigFileNotFoundError); ok {
			// 配置文件未找到，使用默认值
			fmt.Println("配置文件未找到...")
			panic(err)
		} else {
			// 配置文件找到但解析错误
			panic(fmt.Errorf("fatal buzzerror config file: %w", err))
		}
	}

	err = viper.Unmarshal(&conf)
	if err != nil {
		panic(err)
		return
	}

	return conf, err
}
